#ifndef CONFIGURATION_H__
#define CONFIGURATION_H__

typedef Ogre::NameValuePairList VideoOptions;

class Configuration
{
    Ogre::String render_system;
    int res_h;
    int res_w;
    bool full_screen;
    bool tri_screen;
    VideoOptions video_options;
    // Volume variables
    float volumeSFX;
    float volumeBGM;
    // Gameplay variables
    bool skyboxrandom;
    
public:

    Configuration();
    
    void load(Ogre::String filename);
    void save(Ogre::String filename);
    
    Ogre::String& getRenderSystem() { return render_system; }
    int getResolutionHeight() { return res_h; }
    int getResolutionWidth() { return res_w; }
    float getVolumeSFX() { return volumeSFX; }
    float getVolumeBGM() { return volumeBGM; }
    bool getSkyBoxMode() { return skyboxrandom; }
	std::string getFSAA() { return video_options["FSAA"]; }
    void setResolutionHeight(int h) { res_h = h; }
    void setResolutionWidth(int w) { res_w = w; }
    void setVolumeSFX(float newVol) { volumeSFX = newVol; }
    void setVolumeBGM(float newVol) { volumeBGM = newVol; }
    void setSkyBoxMode(bool isRandom) { skyboxrandom = isRandom; }
	void setFSAA(std::string newFSAA) { video_options["FSAA"] = newFSAA; }
	void setFSM(bool isFSM);
    bool isFullScreen() { return full_screen; }
    bool isTriScreen() { return tri_screen; }
    VideoOptions* getVideoOptions() { return &video_options; }

};

#endif
